<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow: flow::async::Timed_concurrent_task_loop_impl&lt; Time_accumulator &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow project: Full implementation reference.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceflow.html">flow</a></li><li class="navelem"><a class="el" href="namespaceflow_1_1async.html">async</a></li><li class="navelem"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">Timed_concurrent_task_loop_impl</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">flow::async::Timed_concurrent_task_loop_impl&lt; Time_accumulator &gt; Class Template Reference</div></div>
</div><!--header-->
<div class="contents">

<p>Decorator of a <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html" title="The core flow::async interface, providing an optionally multi-threaded thread pool onto which runnabl...">Concurrent_task_loop</a> with same or greater lifetime that accumulates time elapsed in any tasks posted or scheduled onto that loop.  
 <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for flow::async::Timed_concurrent_task_loop_impl&lt; Time_accumulator &gt;:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl__inherit__graph.svg" width="184" height="215"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for flow::async::Timed_concurrent_task_loop_impl&lt; Time_accumulator &gt;:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl__coll__graph.svg" width="726" height="199"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a881d40bcfea87884f6f5e9ee4a90c578"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a881d40bcfea87884f6f5e9ee4a90c578">Exchanger_func</a> = <a class="el" href="classflow_1_1Function.html">Function</a>&lt; <a class="el" href="namespaceflow_1_1perf.html#a75b06c669e720c60621f3c68c3d34408">perf::duration_rep_t</a>(Time_accumulator *)&gt;</td></tr>
<tr class="memdesc:a881d40bcfea87884f6f5e9ee4a90c578"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for the exhanger function taken by the ctor.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a881d40bcfea87884f6f5e9ee4a90c578">More...</a><br /></td></tr>
<tr class="separator:a881d40bcfea87884f6f5e9ee4a90c578"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classflow_1_1async_1_1Concurrent__task__loop"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classflow_1_1async_1_1Concurrent__task__loop')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">flow::async::Concurrent_task_loop</a></td></tr>
<tr class="memitem:aa164fb1fe1b3d7fce0de0174d77ea396 inherit pub_types_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aa164fb1fe1b3d7fce0de0174d77ea396">Thread_init_func</a> = <a class="el" href="classflow_1_1Function.html">Function</a>&lt; void(size_t thread_idx)&gt;</td></tr>
<tr class="memdesc:aa164fb1fe1b3d7fce0de0174d77ea396 inherit pub_types_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for the thread-initializer-function optional arg type to <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#afff5e62840791b309e178c5ddc26e594" title="Starts all threads in the thread pool; any queued post()ed (and similar) tasks may begin executing im...">start()</a>.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#aa164fb1fe1b3d7fce0de0174d77ea396">More...</a><br /></td></tr>
<tr class="separator:aa164fb1fe1b3d7fce0de0174d77ea396 inherit pub_types_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aedbd4d34c2bdd56fdcf93ed43c714f70"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#aedbd4d34c2bdd56fdcf93ed43c714f70">Timed_concurrent_task_loop_impl</a> (<a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">Concurrent_task_loop</a> *loop, <a class="el" href="namespaceflow_1_1perf.html#ad61fb186191e4bb824d14601d11a2eb0">perf::Clock_type</a> clock_type, <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a881d40bcfea87884f6f5e9ee4a90c578">Exchanger_func</a> &amp;&amp;exchanger_func_moved)</td></tr>
<tr class="memdesc:aedbd4d34c2bdd56fdcf93ed43c714f70"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a time-accumulating version of existing loop <code>*loop</code>.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#aedbd4d34c2bdd56fdcf93ed43c714f70">More...</a><br /></td></tr>
<tr class="separator:aedbd4d34c2bdd56fdcf93ed43c714f70"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6659220efe57750c9d8cd8e185d3299a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a6659220efe57750c9d8cd8e185d3299a">start</a> (<a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;init_task_or_empty=<a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a>(), const <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aa164fb1fe1b3d7fce0de0174d77ea396">Thread_init_func</a> &amp;thread_init_func_or_empty=<a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aa164fb1fe1b3d7fce0de0174d77ea396">Thread_init_func</a>()) override</td></tr>
<tr class="memdesc:a6659220efe57750c9d8cd8e185d3299a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a6659220efe57750c9d8cd8e185d3299a">More...</a><br /></td></tr>
<tr class="separator:a6659220efe57750c9d8cd8e185d3299a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad0ee24a26236098dfd67b68da120ff69"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#ad0ee24a26236098dfd67b68da120ff69">stop</a> () override</td></tr>
<tr class="memdesc:ad0ee24a26236098dfd67b68da120ff69"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#ad0ee24a26236098dfd67b68da120ff69">More...</a><br /></td></tr>
<tr class="separator:ad0ee24a26236098dfd67b68da120ff69"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2138f93d5fd11407973a7b7b13ca7353"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a2138f93d5fd11407973a7b7b13ca7353">n_threads</a> () const override</td></tr>
<tr class="memdesc:a2138f93d5fd11407973a7b7b13ca7353"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a2138f93d5fd11407973a7b7b13ca7353">More...</a><br /></td></tr>
<tr class="separator:a2138f93d5fd11407973a7b7b13ca7353"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8dd2594499859628be0ed997b5ca4643"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a8dd2594499859628be0ed997b5ca4643">create_op</a> () override</td></tr>
<tr class="memdesc:a8dd2594499859628be0ed997b5ca4643"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a8dd2594499859628be0ed997b5ca4643">More...</a><br /></td></tr>
<tr class="separator:a8dd2594499859628be0ed997b5ca4643"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9c2676395574264b88a4c1f3b7b64b6e"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classflow_1_1async_1_1Op__list.html">Op_list</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a9c2676395574264b88a4c1f3b7b64b6e">per_thread_ops</a> () override</td></tr>
<tr class="memdesc:a9c2676395574264b88a4c1f3b7b64b6e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a9c2676395574264b88a4c1f3b7b64b6e">More...</a><br /></td></tr>
<tr class="separator:a9c2676395574264b88a4c1f3b7b64b6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adb9a4a09e821aad135cfa1f493624630"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#adb9a4a09e821aad135cfa1f493624630">post</a> (<a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;task, <a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485">Synchronicity</a> synchronicity=<a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485a4d7a5700444c0570af37b1f9bcc6eb1f">Synchronicity::S_ASYNC</a>) override</td></tr>
<tr class="memdesc:adb9a4a09e821aad135cfa1f493624630"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#adb9a4a09e821aad135cfa1f493624630">More...</a><br /></td></tr>
<tr class="separator:adb9a4a09e821aad135cfa1f493624630"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ac438177671657e14f0fce378bce445"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a3ac438177671657e14f0fce378bce445">post</a> (const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op, <a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;task, <a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485">Synchronicity</a> synchronicity=<a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485a4d7a5700444c0570af37b1f9bcc6eb1f">Synchronicity::S_ASYNC</a>) override</td></tr>
<tr class="memdesc:a3ac438177671657e14f0fce378bce445"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a3ac438177671657e14f0fce378bce445">More...</a><br /></td></tr>
<tr class="separator:a3ac438177671657e14f0fce378bce445"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79b1d2f2b5bf4fdf16e7701fe3bb44d1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a79b1d2f2b5bf4fdf16e7701fe3bb44d1">schedule_from_now</a> (const <a class="el" href="namespaceflow.html#a48799f1263cdeedec125be51a3db2b79">Fine_duration</a> &amp;from_now, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task) override</td></tr>
<tr class="memdesc:a79b1d2f2b5bf4fdf16e7701fe3bb44d1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a79b1d2f2b5bf4fdf16e7701fe3bb44d1">More...</a><br /></td></tr>
<tr class="separator:a79b1d2f2b5bf4fdf16e7701fe3bb44d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2c3566acb42c14ce7fe31026a711a30b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a2c3566acb42c14ce7fe31026a711a30b">schedule_at</a> (const <a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a> &amp;at, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task) override</td></tr>
<tr class="memdesc:a2c3566acb42c14ce7fe31026a711a30b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a2c3566acb42c14ce7fe31026a711a30b">More...</a><br /></td></tr>
<tr class="separator:a2c3566acb42c14ce7fe31026a711a30b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0b5365734728eff8c995510a91b36be"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#ae0b5365734728eff8c995510a91b36be">schedule_from_now</a> (const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op, const <a class="el" href="namespaceflow.html#a48799f1263cdeedec125be51a3db2b79">Fine_duration</a> &amp;from_now, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task) override</td></tr>
<tr class="memdesc:ae0b5365734728eff8c995510a91b36be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#ae0b5365734728eff8c995510a91b36be">More...</a><br /></td></tr>
<tr class="separator:ae0b5365734728eff8c995510a91b36be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d6b084d36b2bd119d73486be13fcf99"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a7d6b084d36b2bd119d73486be13fcf99">schedule_at</a> (const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op, const <a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a> &amp;at, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task) override</td></tr>
<tr class="memdesc:a7d6b084d36b2bd119d73486be13fcf99"><td class="mdescLeft">&#160;</td><td class="mdescRight">See superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a7d6b084d36b2bd119d73486be13fcf99">More...</a><br /></td></tr>
<tr class="separator:a7d6b084d36b2bd119d73486be13fcf99"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5864fb0f46b84d5783ad194796c25f5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1async.html#a968806f54b14c697fd76b3339a2bdbbf">Task_engine_ptr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#ab5864fb0f46b84d5783ad194796c25f5">task_engine</a> () override</td></tr>
<tr class="memdesc:ab5864fb0f46b84d5783ad194796c25f5"><td class="mdescLeft">&#160;</td><td class="mdescRight">See superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#ab5864fb0f46b84d5783ad194796c25f5">More...</a><br /></td></tr>
<tr class="separator:ab5864fb0f46b84d5783ad194796c25f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45c91b87a9906781479e2387f2f93573"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1perf.html#a38e42ae0923eb23052e3a8a1e7956456">perf::Duration</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a45c91b87a9906781479e2387f2f93573">accumulated_time</a> ()</td></tr>
<tr class="memdesc:a45c91b87a9906781479e2387f2f93573"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the accumulated time spent on tasks this thread pool handles since its last invocation; and reset the accumulated time.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a45c91b87a9906781479e2387f2f93573">More...</a><br /></td></tr>
<tr class="separator:a45c91b87a9906781479e2387f2f93573"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9e915ee364537114a9e2f50574d960b7"><td class="memTemplParams" colspan="2">template&lt;typename Handler &gt; </td></tr>
<tr class="memitem:a9e915ee364537114a9e2f50574d960b7"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a9e915ee364537114a9e2f50574d960b7">asio_handler_timed</a> (Handler &amp;&amp;handler_moved)</td></tr>
<tr class="memdesc:a9e915ee364537114a9e2f50574d960b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given a boost.asio <em>completion handler</em> <code>handler</code> for a boost.asio <code>async_*()</code> action on some boost.asio I/O object to be initiated in the immediate near future, returns a wrapped handler with the same signature to be passed as the handler arg to that <code>async_*()</code> action, so that <code>handler()</code> will be properly timed.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a9e915ee364537114a9e2f50574d960b7">More...</a><br /></td></tr>
<tr class="separator:a9e915ee364537114a9e2f50574d960b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classflow_1_1async_1_1Concurrent__task__loop')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">flow::async::Concurrent_task_loop</a></td></tr>
<tr class="memitem:a7b9123d43e1cfae899b0e1bb52bb6dde inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a7b9123d43e1cfae899b0e1bb52bb6dde">~Concurrent_task_loop</a> () override</td></tr>
<tr class="memdesc:a7b9123d43e1cfae899b0e1bb52bb6dde inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Any implementing subclass's destructor shall execute <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aadadb5b8b6c40ddc86c205de1b8f25b1" title="Waits for any ongoing task(s)/completion handler(s) to return; then prevents any further-queued such ...">stop()</a> &ndash; see its doc header please &ndash; and then clean up any resources.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#a7b9123d43e1cfae899b0e1bb52bb6dde">More...</a><br /></td></tr>
<tr class="separator:a7b9123d43e1cfae899b0e1bb52bb6dde inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afff5e62840791b309e178c5ddc26e594 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#afff5e62840791b309e178c5ddc26e594">start</a> (<a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;init_task_or_empty=<a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a>(), const <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aa164fb1fe1b3d7fce0de0174d77ea396">Thread_init_func</a> &amp;thread_init_func_or_empty=<a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aa164fb1fe1b3d7fce0de0174d77ea396">Thread_init_func</a>())=0</td></tr>
<tr class="memdesc:afff5e62840791b309e178c5ddc26e594 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Starts all threads in the thread pool; any queued <code><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6" title="Cause the given Task (function) to execute within the thread pool as soon as possible,...">post()</a></code>ed (and similar) tasks may begin executing immediately; and any future posted work may execute in these threads.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#afff5e62840791b309e178c5ddc26e594">More...</a><br /></td></tr>
<tr class="separator:afff5e62840791b309e178c5ddc26e594 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aadadb5b8b6c40ddc86c205de1b8f25b1 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aadadb5b8b6c40ddc86c205de1b8f25b1">stop</a> ()=0</td></tr>
<tr class="memdesc:aadadb5b8b6c40ddc86c205de1b8f25b1 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Waits for any ongoing task(s)/completion handler(s) to return; then prevents any further-queued such tasks from running; then gracefully stops/joins all threads in pool; and then returns.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#aadadb5b8b6c40ddc86c205de1b8f25b1">More...</a><br /></td></tr>
<tr class="separator:aadadb5b8b6c40ddc86c205de1b8f25b1 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a131335863b19446dbc349de181d4b5a1 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a131335863b19446dbc349de181d4b5a1">n_threads</a> () const =0</td></tr>
<tr class="memdesc:a131335863b19446dbc349de181d4b5a1 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">How many threads does <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#afff5e62840791b309e178c5ddc26e594" title="Starts all threads in the thread pool; any queued post()ed (and similar) tasks may begin executing im...">start()</a> start?  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#a131335863b19446dbc349de181d4b5a1">More...</a><br /></td></tr>
<tr class="separator:a131335863b19446dbc349de181d4b5a1 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4ee1c5f5785af0bcc6aed0757981ffe3 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a4ee1c5f5785af0bcc6aed0757981ffe3">create_op</a> ()=0</td></tr>
<tr class="memdesc:a4ee1c5f5785af0bcc6aed0757981ffe3 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a new Op which can bundle together an arbitrary set of <code><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6" title="Cause the given Task (function) to execute within the thread pool as soon as possible,...">post()</a></code>s that would result in the provided task functions executing non-concurrently.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#a4ee1c5f5785af0bcc6aed0757981ffe3">More...</a><br /></td></tr>
<tr class="separator:a4ee1c5f5785af0bcc6aed0757981ffe3 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a54bd938b133103328a90d50823755358 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual const <a class="el" href="classflow_1_1async_1_1Op__list.html">Op_list</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a54bd938b133103328a90d50823755358">per_thread_ops</a> ()=0</td></tr>
<tr class="memdesc:a54bd938b133103328a90d50823755358 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the optional-use, pre-created collection of per-thread <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949" title="An object of this opaque type represents a collection of 1 or more async::Task, past or future,...">async::Op</a> objects, such that the i-th <code>Op</code> therein corresponds to the i-th (of N, where N = # of threads in this pool) thread.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#a54bd938b133103328a90d50823755358">More...</a><br /></td></tr>
<tr class="separator:a54bd938b133103328a90d50823755358 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a24f96f97ee24bfabb06c8609bc0e94a6 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6">post</a> (<a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;task, <a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485">Synchronicity</a> synchronicity=<a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485a4d7a5700444c0570af37b1f9bcc6eb1f">Synchronicity::S_ASYNC</a>)=0</td></tr>
<tr class="memdesc:a24f96f97ee24bfabb06c8609bc0e94a6 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cause the given <code>Task</code> (function) to execute within the thread pool as soon as possible, in the first thread available, in otherwise first-come-first-served fashion.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6">More...</a><br /></td></tr>
<tr class="separator:a24f96f97ee24bfabb06c8609bc0e94a6 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0e31275441218c4d77df0730fd5e8f7 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ab0e31275441218c4d77df0730fd5e8f7">post</a> (const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op, <a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;task, <a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485">Synchronicity</a> synchronicity=<a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485a4d7a5700444c0570af37b1f9bcc6eb1f">Synchronicity::S_ASYNC</a>)=0</td></tr>
<tr class="memdesc:ab0e31275441218c4d77df0730fd5e8f7 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Identical to the other <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6" title="Cause the given Task (function) to execute within the thread pool as soon as possible,...">post()</a> with the added constraint that no other <code>Task</code> <em>also</em> similarly posted with the equivalent <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949" title="An object of this opaque type represents a collection of 1 or more async::Task, past or future,...">async::Op</a> may execute concurrently.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#ab0e31275441218c4d77df0730fd5e8f7">More...</a><br /></td></tr>
<tr class="separator:ab0e31275441218c4d77df0730fd5e8f7 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6b98b440d52c079c22d7972c9b12e1b inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ac6b98b440d52c079c22d7972c9b12e1b">schedule_from_now</a> (const <a class="el" href="namespaceflow.html#a48799f1263cdeedec125be51a3db2b79">Fine_duration</a> &amp;from_now, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task)=0</td></tr>
<tr class="memdesc:ac6b98b440d52c079c22d7972c9b12e1b inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to 2-argument <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6" title="Cause the given Task (function) to execute within the thread pool as soon as possible,...">post()</a> but execution is scheduled for later, after the given time period passes.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#ac6b98b440d52c079c22d7972c9b12e1b">More...</a><br /></td></tr>
<tr class="separator:ac6b98b440d52c079c22d7972c9b12e1b inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad0ca0710d990c15cb9ea31535bea24cc inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ad0ca0710d990c15cb9ea31535bea24cc">schedule_at</a> (const <a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a> &amp;at, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task)=0</td></tr>
<tr class="memdesc:ad0ca0710d990c15cb9ea31535bea24cc inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to 2-argument <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ac6b98b440d52c079c22d7972c9b12e1b" title="Equivalent to 2-argument post() but execution is scheduled for later, after the given time period pas...">schedule_from_now()</a> except one specifies an absolute time point instead of wait duration.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#ad0ca0710d990c15cb9ea31535bea24cc">More...</a><br /></td></tr>
<tr class="separator:ad0ca0710d990c15cb9ea31535bea24cc inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af3b04e2c7c2c8ee484a38b1156f8acc0 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#af3b04e2c7c2c8ee484a38b1156f8acc0">schedule_from_now</a> (const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op, const <a class="el" href="namespaceflow.html#a48799f1263cdeedec125be51a3db2b79">Fine_duration</a> &amp;from_now, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task)=0</td></tr>
<tr class="memdesc:af3b04e2c7c2c8ee484a38b1156f8acc0 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to 3-argument <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6" title="Cause the given Task (function) to execute within the thread pool as soon as possible,...">post()</a> but execution is scheduled for later, after the given time period passes.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#af3b04e2c7c2c8ee484a38b1156f8acc0">More...</a><br /></td></tr>
<tr class="separator:af3b04e2c7c2c8ee484a38b1156f8acc0 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab1961159746ebe8b1787eadfbf728287 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ab1961159746ebe8b1787eadfbf728287">schedule_at</a> (const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op, const <a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a> &amp;at, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task)=0</td></tr>
<tr class="memdesc:ab1961159746ebe8b1787eadfbf728287 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to 3-argument <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ac6b98b440d52c079c22d7972c9b12e1b" title="Equivalent to 2-argument post() but execution is scheduled for later, after the given time period pas...">schedule_from_now()</a> except one specifies an absolute time point instead of wait duration.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#ab1961159746ebe8b1787eadfbf728287">More...</a><br /></td></tr>
<tr class="separator:ab1961159746ebe8b1787eadfbf728287 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac446f6bfed9fb54d073a5f3f578ec4bb inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceflow_1_1async.html#a968806f54b14c697fd76b3339a2bdbbf">Task_engine_ptr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ac446f6bfed9fb54d073a5f3f578ec4bb">task_engine</a> ()=0</td></tr>
<tr class="memdesc:ac446f6bfed9fb54d073a5f3f578ec4bb inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a pointer to <em>an</em> internal <a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4" title="Short-hand for boost.asio event service, the central class of boost.asio.">util::Task_engine</a> (a/k/a boost.asio <code>io_context</code>) for the purpose of performing a boost.asio <code>async_*()</code> action on some boost.asio I/O object in the immediate near future.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#ac446f6bfed9fb54d073a5f3f578ec4bb">More...</a><br /></td></tr>
<tr class="separator:ac446f6bfed9fb54d073a5f3f578ec4bb inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classflow_1_1util_1_1Null__interface"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classflow_1_1util_1_1Null__interface')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classflow_1_1util_1_1Null__interface.html">flow::util::Null_interface</a></td></tr>
<tr class="memitem:a5916282577627e424a09884347eddbba inherit pub_methods_classflow_1_1util_1_1Null__interface"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Null__interface.html#a5916282577627e424a09884347eddbba">~Null_interface</a> ()=0</td></tr>
<tr class="memdesc:a5916282577627e424a09884347eddbba inherit pub_methods_classflow_1_1util_1_1Null__interface"><td class="mdescLeft">&#160;</td><td class="mdescRight">Boring <code>virtual</code> destructor.  <a href="classflow_1_1util_1_1Null__interface.html#a5916282577627e424a09884347eddbba">More...</a><br /></td></tr>
<tr class="separator:a5916282577627e424a09884347eddbba inherit pub_methods_classflow_1_1util_1_1Null__interface"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:a2296c02f66d6d49dcf8ed19cb3e68803"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceflow_1_1perf.html#ad61fb186191e4bb824d14601d11a2eb0">flow::perf::Clock_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a2296c02f66d6d49dcf8ed19cb3e68803">m_clock_type</a></td></tr>
<tr class="memdesc:a2296c02f66d6d49dcf8ed19cb3e68803"><td class="mdescLeft">&#160;</td><td class="mdescRight">See constructor.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a2296c02f66d6d49dcf8ed19cb3e68803">More...</a><br /></td></tr>
<tr class="separator:a2296c02f66d6d49dcf8ed19cb3e68803"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0b2bafdbd93df6beff37e10534487e23"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">Concurrent_task_loop</a> *const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a0b2bafdbd93df6beff37e10534487e23">m_loop</a></td></tr>
<tr class="memdesc:a0b2bafdbd93df6beff37e10534487e23"><td class="mdescLeft">&#160;</td><td class="mdescRight">See constructor.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a0b2bafdbd93df6beff37e10534487e23">More...</a><br /></td></tr>
<tr class="separator:a0b2bafdbd93df6beff37e10534487e23"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1f4dacf3f29653acfcef44a6f3f9845a"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a881d40bcfea87884f6f5e9ee4a90c578">Exchanger_func</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a1f4dacf3f29653acfcef44a6f3f9845a">m_exhanger_func</a></td></tr>
<tr class="memdesc:a1f4dacf3f29653acfcef44a6f3f9845a"><td class="mdescLeft">&#160;</td><td class="mdescRight">See constructor.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a1f4dacf3f29653acfcef44a6f3f9845a">More...</a><br /></td></tr>
<tr class="separator:a1f4dacf3f29653acfcef44a6f3f9845a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a55aa9c680221d64b44715256713a5bee"><td class="memItemLeft" align="right" valign="top">Time_accumulator&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a55aa9c680221d64b44715256713a5bee">m_time_accumulator</a></td></tr>
<tr class="memdesc:a55aa9c680221d64b44715256713a5bee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Accumulates time ticks, of clock type <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a2296c02f66d6d49dcf8ed19cb3e68803" title="See constructor.">m_clock_type</a>, spent in tasks posted onto <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a0b2bafdbd93df6beff37e10534487e23" title="See constructor.">m_loop</a>.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a55aa9c680221d64b44715256713a5bee">More...</a><br /></td></tr>
<tr class="separator:a55aa9c680221d64b44715256713a5bee"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="inherited" name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header related_classflow_1_1async_1_1Concurrent__task__loop"><td colspan="2" onclick="javascript:toggleInherit('related_classflow_1_1async_1_1Concurrent__task__loop')"><img src="closed.png" alt="-"/>&#160;Related Functions inherited from <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">flow::async::Concurrent_task_loop</a></td></tr>
<tr class="memitem:a7f2f976a53191a3b0cd28898bb23c551 inherit related_classflow_1_1async_1_1Concurrent__task__loop"><td class="memTemplParams" colspan="2">template&lt;typename Exec_ctx_ptr &gt; </td></tr>
<tr class="memitem:a7f2f976a53191a3b0cd28898bb23c551 inherit related_classflow_1_1async_1_1Concurrent__task__loop"><td class="memTemplItemLeft" align="right" valign="top">Exec_ctx_ptr&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a7f2f976a53191a3b0cd28898bb23c551">op_to_exec_ctx</a> (<a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">Concurrent_task_loop</a> *loop, const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op)</td></tr>
<tr class="memdesc:a7f2f976a53191a3b0cd28898bb23c551 inherit related_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Template specialization model for operation that obtains the underlying execution context, such as a <a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4" title="Short-hand for boost.asio event service, the central class of boost.asio.">util::Task_engine</a> or <a class="el" href="namespaceflow_1_1util.html#aa59354ab408e978c8a7bda1a4706924e" title="Short-hand for boost.asio strand, an ancillary class that works with Task_engine for advanced task sc...">util::Strand</a>, stored in an <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949" title="An object of this opaque type represents a collection of 1 or more async::Task, past or future,...">async::Op</a> generated by the given <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html" title="The core flow::async interface, providing an optionally multi-threaded thread pool onto which runnabl...">Concurrent_task_loop</a>.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#a7f2f976a53191a3b0cd28898bb23c551">More...</a><br /></td></tr>
<tr class="separator:a7f2f976a53191a3b0cd28898bb23c551 inherit related_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><div class="compoundTemplParams">template&lt;typename Time_accumulator&gt;<br />
class flow::async::Timed_concurrent_task_loop_impl&lt; Time_accumulator &gt;</div><p >Decorator of a <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html" title="The core flow::async interface, providing an optionally multi-threaded thread pool onto which runnabl...">Concurrent_task_loop</a> with same or greater lifetime that accumulates time elapsed in any tasks posted or scheduled onto that loop. </p>
<p >While this class template is publicly available, most likely the user shall choose one of 2 related classes:</p><ul>
<li><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop.html" title="Decorates a general – potentially multi-threaded – Concurrent_task_loop of any kind but with timing c...">Timed_concurrent_task_loop</a>: This is essentially an alias of <code><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html" title="Decorator of a Concurrent_task_loop with same or greater lifetime that accumulates time elapsed in an...">Timed_concurrent_task_loop_impl</a>&lt;T&gt;</code>, where <code>T</code> is an <code>atomic</code> suitable for accumulating times from tasks executing across a multi-thread pool. Use this if you have a general <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html" title="The core flow::async interface, providing an optionally multi-threaded thread pool onto which runnabl...">Concurrent_task_loop</a> (of whatever actual non-abstract type) which may at times use multiple threads. In other words use it if you want a <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html" title="The core flow::async interface, providing an optionally multi-threaded thread pool onto which runnabl...">Concurrent_task_loop</a>... but timed.</li>
<li><a class="el" href="classflow_1_1async_1_1Timed__single__thread__task__loop.html" title="Identical to Single_thread_task_loop, but all tasks posted through it are automatically timed,...">Timed_single_thread_task_loop</a>: This is a refinement (subclass) of <a class="el" href="classflow_1_1async_1_1Single__thread__task__loop.html" title="A Concurrent_task_loop-related adapter-style class that represents a single-thread task loop; essenti...">Single_thread_task_loop</a>. Internally it uses a <code><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop.html" title="Decorates a general – potentially multi-threaded – Concurrent_task_loop of any kind but with timing c...">Timed_concurrent_task_loop</a>&lt;<a class="el" href="namespaceflow_1_1perf.html#a75b06c669e720c60621f3c68c3d34408" title="The raw type used in Duration to store its clock ticks.">perf::duration_rep_t</a>&gt;</code>, since no <code>atomic</code> is needed with only 1 thread of execution. In other words use it if you want a <a class="el" href="classflow_1_1async_1_1Single__thread__task__loop.html" title="A Concurrent_task_loop-related adapter-style class that represents a single-thread task loop; essenti...">Single_thread_task_loop</a>... but timed.</li>
</ul>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop.html" title="Decorates a general – potentially multi-threaded – Concurrent_task_loop of any kind but with timing c...">Timed_concurrent_task_loop</a> doc header for instructions/synopsis of timing functionality.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Time_accumulator</td><td>As of this writing this should be either <a class="el" href="namespaceflow_1_1perf.html#a75b06c669e720c60621f3c68c3d34408" title="The raw type used in Duration to store its clock ticks.">perf::duration_rep_t</a>; or <code>atomic&lt;<a class="el" href="namespaceflow_1_1perf.html#a75b06c669e720c60621f3c68c3d34408" title="The raw type used in Duration to store its clock ticks.">perf::duration_rep_t</a>&gt;</code>, depending on whether the <code>Timed_*_loop</code> that uses this template instance is guaranteed to be single-threaded or potentially a multi-thread pool. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00051">51</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="a881d40bcfea87884f6f5e9ee4a90c578" name="a881d40bcfea87884f6f5e9ee4a90c578"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a881d40bcfea87884f6f5e9ee4a90c578">&#9670;&nbsp;</a></span>Exchanger_func</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::Exchanger_func =  <a class="el" href="classflow_1_1Function.html">Function</a>&lt;<a class="el" href="namespaceflow_1_1perf.html#a75b06c669e720c60621f3c68c3d34408">perf::duration_rep_t</a> (Time_accumulator*)&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Short-hand for the exhanger function taken by the ctor. </p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00057">57</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="aedbd4d34c2bdd56fdcf93ed43c714f70" name="aedbd4d34c2bdd56fdcf93ed43c714f70"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aedbd4d34c2bdd56fdcf93ed43c714f70">&#9670;&nbsp;</a></span>Timed_concurrent_task_loop_impl()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::Timed_concurrent_task_loop_impl </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">Concurrent_task_loop</a> *&#160;</td>
          <td class="paramname"><em>loop</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1perf.html#ad61fb186191e4bb824d14601d11a2eb0">perf::Clock_type</a>&#160;</td>
          <td class="paramname"><em>clock_type</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a881d40bcfea87884f6f5e9ee4a90c578">Exchanger_func</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>exchanger_func_moved</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructs a time-accumulating version of existing loop <code>*loop</code>. </p>
<p ><code>*loop</code> must exist at least until <code>*this</code> is destroyed.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">clock_type</td><td>See <a class="el" href="namespaceflow_1_1perf.html#a0dee22ec7bf250bbbf556a7e15c1f784" title="Constructs a closure that times and executes void-returning function(), adding the elapsed time with ...">timed_function()</a>. Use a <a class="el" href="namespaceflow_1_1perf.html#ad61fb186191e4bb824d14601d11a2eb0" title="Clock types supported by flow::perf module facilities, perf::Checkpointing_timer in particular.">perf::Clock_type</a> that tracks thread time, not process time, typically. That said, in single-thread loops without competing concurrent work on the same machine, more precise non-per-thread clocks may be suitable (it is a trade-off). </td></tr>
    <tr><td class="paramname">loop</td><td>The loop object being decorated with timing functionality. </td></tr>
    <tr><td class="paramname">exchanger_func_moved</td><td>If <code>A</code> is a <code>Time_accumulator</code>, then <code>exchanger_func_moved()</code> must return the <a class="el" href="namespaceflow_1_1perf.html#a75b06c669e720c60621f3c68c3d34408" title="The raw type used in Duration to store its clock ticks.">perf::duration_rep_t</a> currently stored in <code>A</code> and &ndash; as atomically as possible &ndash; store <code>0</code> in <code>A</code> before returning that. More specifically, if <code>Time_accumulator</code> is an <code>atomic</code>, then use <code>.exchange(0)</code>; if it's simply <a class="el" href="namespaceflow_1_1perf.html#a75b06c669e720c60621f3c68c3d34408" title="The raw type used in Duration to store its clock ticks.">perf::duration_rep_t</a>, then it can save the value, set it to 0, then return the saved thing (as concurrency is not a concern). </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00290">290</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a45c91b87a9906781479e2387f2f93573" name="a45c91b87a9906781479e2387f2f93573"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a45c91b87a9906781479e2387f2f93573">&#9670;&nbsp;</a></span>accumulated_time()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceflow_1_1perf.html#a38e42ae0923eb23052e3a8a1e7956456">perf::Duration</a> <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::accumulated_time</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns the accumulated time spent on tasks this thread pool handles since its last invocation; and reset the accumulated time. </p>
<dl class="section see"><dt>See also</dt><dd>Constructor which controls the behavior of the timing.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00385">385</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="single__thread__task__loop_8cpp_source.html#l00117">flow::async::Timed_single_thread_task_loop::accumulated_time()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl_a45c91b87a9906781479e2387f2f93573_icgraph.svg" width="376" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a9e915ee364537114a9e2f50574d960b7" name="a9e915ee364537114a9e2f50574d960b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9e915ee364537114a9e2f50574d960b7">&#9670;&nbsp;</a></span>asio_handler_timed()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<div class="memtemplate">
template&lt;typename Handler &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">auto <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::asio_handler_timed </td>
          <td>(</td>
          <td class="paramtype">Handler &amp;&amp;&#160;</td>
          <td class="paramname"><em>handler_moved</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Given a boost.asio <em>completion handler</em> <code>handler</code> for a boost.asio <code>async_*()</code> action on some boost.asio I/O object to be initiated in the immediate near future, returns a wrapped handler with the same signature to be passed as the handler arg to that <code>async_*()</code> action, so that <code>handler()</code> will be properly timed. </p>
<p >The mechanics of using this are explained in the class doc header. Using this in any other fashion leads to undefined behavior.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Handler</td><td>See <a class="el" href="namespaceflow_1_1async.html#af90c1e763d49c3f3033a74871e897394" title="Given a boost.asio completion handler handler for a boost.asio async_*() action on some boost....">asio_handler_via_op()</a>: same here. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">handler_moved</td><td>Completion handler for the boost.asio <code>async_*()</code> operation to be initiated soon. It may be <code>move</code>d and saved. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A completion handler that will act as <code>handler()</code> but with the addition of timing as returned by <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a45c91b87a9906781479e2387f2f93573" title="Returns the accumulated time spent on tasks this thread pool handles since its last invocation; and r...">accumulated_time()</a>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00392">392</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

<p class="reference">References <a class="el" href="timed__handler_8hpp_source.html#l00033">flow::perf::timed_handler()</a>.</p>

<p class="reference">Referenced by <a class="el" href="single__thread__task__loop_8hpp_source.html#l00400">flow::async::Timed_single_thread_task_loop::asio_handler_timed()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl_a9e915ee364537114a9e2f50574d960b7_cgraph.svg" width="799" height="78"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl_a9e915ee364537114a9e2f50574d960b7_icgraph.svg" width="388" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a8dd2594499859628be0ed997b5ca4643" name="a8dd2594499859628be0ed997b5ca4643"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8dd2594499859628be0ed997b5ca4643">&#9670;&nbsp;</a></span>create_op()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::create_op</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Implements superclass API. </p>
<dl class="section return"><dt>Returns</dt><dd>See superclass API. </dd></dl>

<p>Implements <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a4ee1c5f5785af0bcc6aed0757981ffe3">flow::async::Concurrent_task_loop</a>.</p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00320">320</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

</div>
</div>
<a id="a2138f93d5fd11407973a7b7b13ca7353" name="a2138f93d5fd11407973a7b7b13ca7353"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2138f93d5fd11407973a7b7b13ca7353">&#9670;&nbsp;</a></span>n_threads()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">size_t <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::n_threads</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Implements superclass API. </p>
<dl class="section return"><dt>Returns</dt><dd>See superclass API. </dd></dl>

<p>Implements <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a131335863b19446dbc349de181d4b5a1">flow::async::Concurrent_task_loop</a>.</p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00314">314</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

</div>
</div>
<a id="a9c2676395574264b88a4c1f3b7b64b6e" name="a9c2676395574264b88a4c1f3b7b64b6e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9c2676395574264b88a4c1f3b7b64b6e">&#9670;&nbsp;</a></span>per_thread_ops()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="classflow_1_1async_1_1Op__list.html">Op_list</a> &amp; <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::per_thread_ops</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Implements superclass API. </p>
<dl class="section return"><dt>Returns</dt><dd>See superclass API. </dd></dl>

<p>Implements <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a54bd938b133103328a90d50823755358">flow::async::Concurrent_task_loop</a>.</p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00326">326</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

</div>
</div>
<a id="a3ac438177671657e14f0fce378bce445" name="a3ac438177671657e14f0fce378bce445"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ac438177671657e14f0fce378bce445">&#9670;&nbsp;</a></span>post() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::post </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;&#160;</td>
          <td class="paramname"><em>op</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>task</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485">Synchronicity</a>&#160;</td>
          <td class="paramname"><em>synchronicity</em> = <code><a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485a4d7a5700444c0570af37b1f9bcc6eb1f">Synchronicity::S_ASYNC</a></code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Implements superclass API. </p>
<p >In this implementation: <code>task</code> will execute as soon as a thread is available, because no other applicable work is forthcoming, plus one more constraint: It will not allow <code>task</code> to execute concurrently to any other <code>Task</code> also associated with <code>op</code>. The latter is accomplished on account of <code>Op</code> internally being associated with a <a class="el" href="namespaceflow_1_1util.html#aa59354ab408e978c8a7bda1a4706924e" title="Short-hand for boost.asio strand, an ancillary class that works with Task_engine for advanced task sc...">util::Strand</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">op</td><td>See superclass API. </td></tr>
    <tr><td class="paramname">task</td><td>See superclass API. </td></tr>
    <tr><td class="paramname">synchronicity</td><td>See superclass API. </td></tr>
  </table>
  </dd>
</dl>

<p>Implements <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ab0e31275441218c4d77df0730fd5e8f7">flow::async::Concurrent_task_loop</a>.</p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00339">339</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

<p class="reference">References <a class="el" href="timed__function_8hpp_source.html#l00032">flow::perf::timed_function()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl_a3ac438177671657e14f0fce378bce445_cgraph.svg" width="571" height="78"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="adb9a4a09e821aad135cfa1f493624630" name="adb9a4a09e821aad135cfa1f493624630"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adb9a4a09e821aad135cfa1f493624630">&#9670;&nbsp;</a></span>post() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::post </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>task</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485">Synchronicity</a>&#160;</td>
          <td class="paramname"><em>synchronicity</em> = <code><a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485a4d7a5700444c0570af37b1f9bcc6eb1f">Synchronicity::S_ASYNC</a></code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Implements superclass API. </p>
<p >In this implementation: <code>task</code> will execute as soon as a thread is available, because no other applicable work is forthcoming.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">task</td><td>See superclass API. </td></tr>
    <tr><td class="paramname">synchronicity</td><td>See superclass API. </td></tr>
  </table>
  </dd>
</dl>

<p>Implements <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6">flow::async::Concurrent_task_loop</a>.</p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00332">332</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

<p class="reference">References <a class="el" href="timed__function_8hpp_source.html#l00032">flow::perf::timed_function()</a>.</p>

<p class="reference">Referenced by <a class="el" href="single__thread__task__loop_8cpp_source.html#l00101">flow::async::Timed_single_thread_task_loop::post()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl_adb9a4a09e821aad135cfa1f493624630_cgraph.svg" width="571" height="78"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl_adb9a4a09e821aad135cfa1f493624630_icgraph.svg" width="331" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a2c3566acb42c14ce7fe31026a711a30b" name="a2c3566acb42c14ce7fe31026a711a30b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2c3566acb42c14ce7fe31026a711a30b">&#9670;&nbsp;</a></span>schedule_at() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a> <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::schedule_at </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a> &amp;&#160;</td>
          <td class="paramname"><em>at</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>task</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Implements superclass API. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">at</td><td>See superclass API. </td></tr>
    <tr><td class="paramname">task</td><td>See superclass API. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See superclass API. </dd></dl>

<p>Implements <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ad0ca0710d990c15cb9ea31535bea24cc">flow::async::Concurrent_task_loop</a>.</p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00355">355</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

<p class="reference">References <a class="el" href="timed__function_8hpp_source.html#l00032">flow::perf::timed_function()</a>.</p>

<p class="reference">Referenced by <a class="el" href="single__thread__task__loop_8cpp_source.html#l00112">flow::async::Timed_single_thread_task_loop::schedule_at()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl_a2c3566acb42c14ce7fe31026a711a30b_cgraph.svg" width="571" height="78"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl_a2c3566acb42c14ce7fe31026a711a30b_icgraph.svg" width="331" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a7d6b084d36b2bd119d73486be13fcf99" name="a7d6b084d36b2bd119d73486be13fcf99"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7d6b084d36b2bd119d73486be13fcf99">&#9670;&nbsp;</a></span>schedule_at() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a> <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::schedule_at </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;&#160;</td>
          <td class="paramname"><em>op</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a> &amp;&#160;</td>
          <td class="paramname"><em>at</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>task</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See superclass API. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">op</td><td>See superclass API. </td></tr>
    <tr><td class="paramname">at</td><td>See superclass API. </td></tr>
    <tr><td class="paramname">task</td><td>See superclass API. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See superclass API. </dd></dl>

<p>Implements <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ab1961159746ebe8b1787eadfbf728287">flow::async::Concurrent_task_loop</a>.</p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00371">371</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

<p class="reference">References <a class="el" href="timed__function_8hpp_source.html#l00032">flow::perf::timed_function()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl_a7d6b084d36b2bd119d73486be13fcf99_cgraph.svg" width="571" height="78"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a79b1d2f2b5bf4fdf16e7701fe3bb44d1" name="a79b1d2f2b5bf4fdf16e7701fe3bb44d1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a79b1d2f2b5bf4fdf16e7701fe3bb44d1">&#9670;&nbsp;</a></span>schedule_from_now() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a> <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::schedule_from_now </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespaceflow.html#a48799f1263cdeedec125be51a3db2b79">Fine_duration</a> &amp;&#160;</td>
          <td class="paramname"><em>from_now</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>task</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Implements superclass API. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">from_now</td><td>See superclass API. </td></tr>
    <tr><td class="paramname">task</td><td>See superclass API. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See superclass API. </dd></dl>

<p>Implements <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ac6b98b440d52c079c22d7972c9b12e1b">flow::async::Concurrent_task_loop</a>.</p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00347">347</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

<p class="reference">References <a class="el" href="timed__function_8hpp_source.html#l00032">flow::perf::timed_function()</a>.</p>

<p class="reference">Referenced by <a class="el" href="single__thread__task__loop_8cpp_source.html#l00107">flow::async::Timed_single_thread_task_loop::schedule_from_now()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl_a79b1d2f2b5bf4fdf16e7701fe3bb44d1_cgraph.svg" width="595" height="78"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl_a79b1d2f2b5bf4fdf16e7701fe3bb44d1_icgraph.svg" width="392" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="ae0b5365734728eff8c995510a91b36be" name="ae0b5365734728eff8c995510a91b36be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae0b5365734728eff8c995510a91b36be">&#9670;&nbsp;</a></span>schedule_from_now() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a> <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::schedule_from_now </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;&#160;</td>
          <td class="paramname"><em>op</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="namespaceflow.html#a48799f1263cdeedec125be51a3db2b79">Fine_duration</a> &amp;&#160;</td>
          <td class="paramname"><em>from_now</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>task</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Implements superclass API. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">op</td><td>See superclass API. </td></tr>
    <tr><td class="paramname">from_now</td><td>See superclass API. </td></tr>
    <tr><td class="paramname">task</td><td>See superclass API. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See superclass API. </dd></dl>

<p>Implements <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#af3b04e2c7c2c8ee484a38b1156f8acc0">flow::async::Concurrent_task_loop</a>.</p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00363">363</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

<p class="reference">References <a class="el" href="timed__function_8hpp_source.html#l00032">flow::perf::timed_function()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__impl_ae0b5365734728eff8c995510a91b36be_cgraph.svg" width="595" height="78"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a6659220efe57750c9d8cd8e185d3299a" name="a6659220efe57750c9d8cd8e185d3299a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6659220efe57750c9d8cd8e185d3299a">&#9670;&nbsp;</a></span>start()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::start </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>init_task_or_empty</em> = <code><a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a>()</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aa164fb1fe1b3d7fce0de0174d77ea396">Thread_init_func</a> &amp;&#160;</td>
          <td class="paramname"><em>thread_init_func_or_empty</em> = <code><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aa164fb1fe1b3d7fce0de0174d77ea396">Thread_init_func</a>()</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Implements superclass API. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">init_task_or_empty</td><td>See superclass API. </td></tr>
    <tr><td class="paramname">thread_init_func_or_empty</td><td>See superclass API. </td></tr>
  </table>
  </dd>
</dl>

<p>Implements <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#afff5e62840791b309e178c5ddc26e594">flow::async::Concurrent_task_loop</a>.</p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00301">301</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

</div>
</div>
<a id="ad0ee24a26236098dfd67b68da120ff69" name="ad0ee24a26236098dfd67b68da120ff69"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad0ee24a26236098dfd67b68da120ff69">&#9670;&nbsp;</a></span>stop()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::stop</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Implements superclass API. </p>

<p>Implements <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aadadb5b8b6c40ddc86c205de1b8f25b1">flow::async::Concurrent_task_loop</a>.</p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00308">308</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

</div>
</div>
<a id="ab5864fb0f46b84d5783ad194796c25f5" name="ab5864fb0f46b84d5783ad194796c25f5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab5864fb0f46b84d5783ad194796c25f5">&#9670;&nbsp;</a></span>task_engine()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceflow_1_1async.html#a968806f54b14c697fd76b3339a2bdbbf">Task_engine_ptr</a> <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::task_engine</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See superclass API. </p>
<dl class="section return"><dt>Returns</dt><dd>See superclass API. </dd></dl>

<p>Implements <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ac446f6bfed9fb54d073a5f3f578ec4bb">flow::async::Concurrent_task_loop</a>.</p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00379">379</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a2296c02f66d6d49dcf8ed19cb3e68803" name="a2296c02f66d6d49dcf8ed19cb3e68803"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2296c02f66d6d49dcf8ed19cb3e68803">&#9670;&nbsp;</a></span>m_clock_type</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="namespaceflow_1_1perf.html#ad61fb186191e4bb824d14601d11a2eb0">flow::perf::Clock_type</a> <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::m_clock_type</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See constructor. </p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00227">227</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

</div>
</div>
<a id="a1f4dacf3f29653acfcef44a6f3f9845a" name="a1f4dacf3f29653acfcef44a6f3f9845a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1f4dacf3f29653acfcef44a6f3f9845a">&#9670;&nbsp;</a></span>m_exhanger_func</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a881d40bcfea87884f6f5e9ee4a90c578">Exchanger_func</a> <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::m_exhanger_func</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See constructor. </p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00233">233</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

</div>
</div>
<a id="a0b2bafdbd93df6beff37e10534487e23" name="a0b2bafdbd93df6beff37e10534487e23"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0b2bafdbd93df6beff37e10534487e23">&#9670;&nbsp;</a></span>m_loop</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">Concurrent_task_loop</a>* const <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::m_loop</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See constructor. </p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00230">230</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

</div>
</div>
<a id="a55aa9c680221d64b44715256713a5bee" name="a55aa9c680221d64b44715256713a5bee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a55aa9c680221d64b44715256713a5bee">&#9670;&nbsp;</a></span>m_time_accumulator</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Time_accumulator &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Time_accumulator <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl</a>&lt; Time_accumulator &gt;::m_time_accumulator</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Accumulates time ticks, of clock type <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a2296c02f66d6d49dcf8ed19cb3e68803" title="See constructor.">m_clock_type</a>, spent in tasks posted onto <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a0b2bafdbd93df6beff37e10534487e23" title="See constructor.">m_loop</a>. </p>

<p class="definition">Definition at line <a class="el" href="timed__concurrent__task__loop_8hpp_source.html#l00236">236</a> of file <a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>async/<a class="el" href="async__fwd_8hpp_source.html">async_fwd.hpp</a></li>
<li>async/<a class="el" href="timed__concurrent__task__loop_8hpp_source.html">timed_concurrent_task_loop.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2025 22:55:35 for Flow by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
